package com.atguigu.bigdata.scala.chapter05

object Scala07_Function_Hell {

    def main(args: Array[String]): Unit = {

        // TODO 函数式编程 - 地狱
        // 函数是scala语言非常重要的语法结构，万物皆函数
        // 函数在scala中不仅仅是功能的封装，也可以讲它看做对象来使用
        // User user = new User();
        // user.xxxxx

        // 1. 将函数作为对象赋值给变量
        def fun1(): Unit = {
            println("fun1....")
        }
        // 如果函数名称后面增加小括号，表示调用（执行）这个函数
        // 如果想将函数作为整体来使用，那么不能增加小括号
        //val f = fun1()
        // 如果函数的参数列表没有参数，那么调用时，小括号可以省略的
        //val f = fun1

        // 在当前场合下，如果想要将函数作为整体进行赋值，需要使用特殊符号 : _
        // 当将函数赋值给变量时，那么这个变量就是一个函数对象,变量的类型是函数类型
        // 这里的函数类型：(参数类型)=>返回值类型
        val f : ()=>Unit = fun1 _

        // 如果变量为函数类型的对象，那么可以在变量的后面增加小括号调用，如果有参数，也可以同时提供参数
        f()

        // 1. 可以重复使用
        //    new User(), new User()
        //    User user = new User();
        // 2. 变量可以赋值，也可以返回
        fun1()


    }
}
